我试着把一些Excel公式转换成C#代码,我有点迷失了.
我有以下几点:
SUMPRODUCT(1*(RIGHT(A1)={"a","e","i","n","y"}))那到底是什么意思?
以下是我所知道的:
RIGHT(A1)返回A1.SUMPRODUCT({1,2,3}, {4,5,6})中文本的最后一个字符1*4 + 2*5 + 3*6 (类似于标量产品,对吗?)。
但我不明白的是:
如果文本是Claude,例如.
RIGHT(A1)={"e","a","b","c","d"}返回TRUE
和
RIGHT(A1)={"a","b","e","c","d"}返回FALSE
我只更改了e字符的索引位置。
那里发生了什么事?
我不明白什么?
发布于 2011-09-23 20:14:42
基本上,公式是检查单元格A1中的最后一个字符是否为下列字符之一: a、e、i、n或y。SUMPRODUCT部分很重要,因为同时检查整个数组与最后一个字符是一个黑客。当您去掉该部分并只使用RIGHT(A1)={"a","b","e","c","d"}时,Excel实际上只查看数组中的第一个条目,检查是否匹配,并立即返回。所以当'e‘处于第一个位置时,你就得到了True。
SUMPRODUCT允许在整个数组中应用检查。另一种查看这一点的方法是以如下方式手动将其输入到单独的单元格中
A | B | C | D
1 | Claude | =RIGHT(A1,1) | 'a' | =1*(B1=C1)
2 | | =RIGHT(A1,1) | 'e' | =1*(B2=C2)
3 | | =RIGHT(A1,1) | 'i' | =1*(B3=C3)
4 | | =RIGHT(A1,1) | 'n' | =1*(B4=C4)
5 | | =RIGHT(A1,1) | 'y' | =1*(B5=C5)
6 | | | | =SUM(D1:D5)如果任何字符a、e、i、n、y位于A1值的末尾,则右下角单元格将包含一个1;如果没有,则包含一个0。我正在手动执行与SUMPRODUCT相同的逻辑以获得相同的结果。
那么,如何在C#.Net中实现这一点:
var checkValue = "Claude";
var letters = {"a", "e", "i", "n", "y"};
var found = 0;
foreach (var theLetter in letters)
if (checkValue.EndsWith(theLetter))
found = 1;
return found; // returns same value as Excel function发布于 2011-09-23 20:36:13
如果您想要一条基于@CoryLarson的建议的行,它适用于任意一组字母:
Func<string, string[], int> LetterCount = (x, y) => y.Contains(x.Substring(x.Length-1, 1)) ? 1 : 0;https://stackoverflow.com/questions/7534235
复制相似问题