我有一个数组,其中包含通过.ToCharArray
方法从单词转换的字符。我想检查一下这个数组(字)中出现的字母数。我怎么能这样做?
答案 0 :(得分:3)
一种方法是查找:
Dim letterLookup = yourCharArray.ToLookup(Function(c) c)
' For example the letter e, note that it's case sensitive '
Dim eLetterCount As Int32 = letterLookup("e"c).Count()
这样做效率很高,甚至可以查看String
/ Char()
中未包含的字母,结果会得到0。
顺便说一句,您不需要使用ToCharArray
,您可以将此代码用于原始字符串。
如果您想列出所有包含的字母:
Dim allLetters As IEnumerable(Of Char) = letterLookup.Select(Function(kv) kv.key)
如果您想忽略此案例,请将e
和E
视为相同:
Dim letterLookup = yourCharArray.tolookup(Function(c) c, StringComparer.CurrentCultureIgnoreCase)
例如单词' tent'。该程序将检查哪个字母 发生不止一次(t)并找到数组中的位置(在此 案例0,3)。它还会在另一个阵列中找到位置 字母。
然后我会使用另一种方法也使用LINQ:
Dim duplicateLetterPositions As Dictionary(Of Char,List(Of Integer)) = yourCharArray.
Select(Function(c, index) New With {.Char = c, .Index = index}).
GroupBy(Function(c) c.Char).
Where(Function(grp) grp.Count > 1).
ToDictionary(Function(grp) grp.Key, Function(grp) grp.Select(Function(x) x.Index).ToList())