我正在创建一个函数,该函数将返回数组中元素索引的总和。
下面是我的代码,但是如果textCondition =" aa"则会出现小错误。或者任何具有相同值的元素,该函数只计算一次索引。它应该是(条件[]中的索引*号。元素。是否有可能在linq中解决这个问题?
string textCondition = "aa";
string[] alphabet = { "", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
string[] condition = new string[textCondition.Length];
int idx = 0;
while (idx < textCondition.Length)
{
string con = textCondition.Substring(idx++, 1);
condition[idx - 1] = con;
}
var sum = alphabet.Select((v, i) => new { Index = i, Value = v })
.Where(t => condition.Contains(t.Value))
.Select(t => t.Index)
.ToList().Sum();
答案 0 :(得分:0)
从我所看到的,您只想根据字母来总结序数。如果是这种情况,为什么不在字符串中使用字符的ASCII码,并减去一个常量值,使其从1开始?
小写'a'是ASCII 97,因此只需从字母中减去96就可以获得相同的行为,前提是它们都在[a-z]范围内。
请注意,字符串也可以看作是字符的IEnumerable,因此您不必使用循环来获取字符,因为所有内容都可以使用LINQ方法直接完成。
这样的事情应该做:
textCondition.Sum(c => c - 96);
或者,如果你想:
textCondition.Sum(c => c - 'a' + 1);
如果您只想将小写字母相加,只是跳过其余字符,您只需使用Where子句过滤它们即可。
textCondition.Where(c => c >= 'a' && c <= 'z').Sum(c => c - 'a' + 1);