如何在char数组中查找值的索引?

时间:2019-03-02 14:09:59

标签: c# linq

假设我有这个char数组:

private char[] _alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                        .ToCharArray();

我想找到字符B的索引,因此代码必须返回1。

我写了这个方法:

public int? GetCharIndex(string code)
{
    return _alpha.FirstOrDefault(c => c.ToString() == code.ToUpper());
}

其中codebGetCharIndex的结果是:66,为什么我得到这个结果?

在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

使用Array.IndexOf

https://docs.microsoft.com/en-us/dotnet/api/system.array.indexof?view=netframework-4.7.2

您得到的66是'B'ascii值。

FirstOrDefault函数返回实际项目(B)而不是索引。

所以:

int index = Array.IndexOf(_alpha, code.ToUpper());

答案 1 :(得分:0)

如前所述,您想使用Linq。 LINQ中的Select有一个替代,使您可以显示索引。获得第一个匹配值将为我们提供事件的索引。如果您希望匹配中的所有索引,也可以将.FirstOrDefault()替换为.ToList()

要列出

char[] _alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToArray();

var code = "b";

var key = _alpha.Select((s, i) => new { i, s })
       .Where(t => t.s.ToString().ToUpper() == code.ToUpper())
       .Select(t => t.i)
       .ToList();

或者,上面的内容也可以写成

FirstOrDefault

return _alpha.Select((s, i) => new { i, s }).FirstOrDefault(t => t.s.ToString().ToUpper() == code.ToUpper()).i;

答案 2 :(得分:0)

  

为什么我得到这个结果?

Nullable<Char>可以隐式转换为Nullable<Int32>,因为Char可以隐式转换为Int32。这会在您的return语句中发生。如果找到,您将从数组中返回字符。

人们所说的ASCII码,是指字符码;特别是由于.NET使用Unicode字符集的UTF-16字符编码,因此使用UTF-16代码单元值。

BTW-VB4 / 5/6 / A / Script,Java,JavaScript……也将UTF-16用于文本数据类型。

要使用标准的LINQ运算符,请选择提供像Select这样的索引的运算符:

Char[] _alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

Func<Char, StringComparison, Int32?> GetIndexOf = (code, comparisonType) => {
    var value = code.ToString();
    return _alpha
        .Select((c, i) => c.ToString()
           .Equals(value, StringComparison.InvariantCultureIgnoreCase) ? i : (Int32?)null)
        .FirstOrDefault(i => i.HasValue); } ;

Debug.Assert(1 == GetIndexOf('B', StringComparison.InvariantCultureIgnoreCase));
Debug.Assert(null == GetIndexOf('3', StringComparison.InvariantCultureIgnoreCase));

而且,您必须通过“ .ToUpper”决定您的真正意图。作为问题/代码审查问题,目前尚不清楚。最好以这样的方式编写您的问题和代码(或至少作为代码注释),以解释字母比较的正确文化。您所使用的语言取决于程序的当前区域性,该区域性是从程序启动时的用户区域性初始化的。