簡體   English   中英

C# 字符串數組包含來自另一個字符串數組的字符串部分

[英]C# Array of strings contains string part from another array of strings

有沒有辦法使用 LINQ 來查找一個字符串數組中的字符串是否包含另一個字符串數組中的(部分)字符串? 像這樣的東西:

string[] fullStrings = { "full_xxx_part_name", "full_ccc_part_name", "full_zzz_part_name" };
string[] stringParts = { "a_part", "b_part", "c_part", "e_part" }; 

// compare fullStrings array with stringParts array
// full_ccc_part_name contains c_part (first match is OK, no need to find all)
// return index 1 (index 1 from fullStrings array)

這是為了教育目的而提出的。 我知道 Linq 不會神奇地避免循環,而是在后台執行。

您可以將Where + Any與字符串方法一起使用:

string[] matches = fullStrings
     .Where(s => stringParts.Any(s.Contains))
     .ToArray();

如果您想以不區分大小寫的方式進行比較,請使用IndexOf

string[] matches = fullStrings
     .Where(s => stringParts.Any(part => s.IndexOf(part, StringComparison.OrdinalIgnoreCase) >= 0))
     .ToArray();

如果您想要索引:

int[] matches = fullStrings 
     .Select((s, index) => (String: s, Index: index))
     .Where(x => stringParts.Any(x.String.Contains))
     .Select(x => x.Index)
     .ToArray();

您當然需要使用某種類型的循環來查找索引。 這是使用 Linq 的解決方案。 如果找到匹配項,這將返回第一個索引,如果沒有找到匹配項,則返回 -1:

var index = fullStrings
              .Select((s,i) => (s, i))
              .Where(x => stringParts.Any(x.s.Contains))
              .Select(x => x.i)
              .DefaultIfEmpty(-1)
              .First();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM