String.Split()を実行して、文字列の3つのリストを作成します。その後、それらのリストで交差を実行すると、結果は私が期待するものではありません。コード1(機能しない)
string a = "AID, BID";
string b = "[vs|AID|1365]";
string c = "[vs|BID|1365]";
List<string> la = new List<string>();
string[] k = a.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string p in k)
{
la.Add(p);
}
//la.AddRange(k.ToList());
List<string> lb = new List<string>();
string[] kk = b.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string p in kk)
{
lb.Add(p);
}
//lb.AddRange(kk.ToList());
List<string> lc = new List<string>();
string[] kkk = c.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string p in kkk)
{
lc.Add(p);
}
//lc.AddRange(kkk.ToList());
var t = la.Intersect(lb, StringComparer.InvariantCultureIgnoreCase);
Debug.WriteLine(t.Count()); //Prints 1 -- RIGHT
var tt = la.Intersect(lc, StringComparer.InvariantCultureIgnoreCase);
Debug.WriteLine(tt.Count()); //Prints 0 -- WRONG!!!
AddRangeを試しましたが、それも機能しませんでした。私が気付いたもう1つのことは、「文字列a」割り当てでAIDとBIDのシーケンスを変更した場合、intersectはBIDを検出しますが、AIDは検出しません。理由がわかりませんか?
上記のルーチンのハードコードされたバージョンは正常に機能します
List<string> la = new List<string>(); la.Add("AID"); la.Add("BID");
List<string> lb = new List<string>(); lb.Add("[vs"); lb.Add("AID"); lb.Add("1365]");
List<string> lc = new List<string>(); lc.Add("[vs"); lc.Add("BID"); lc.Add("1365]");
var t = la.Intersect(lb, StringComparer.InvariantCultureIgnoreCase);
Debug.WriteLine(t.Count()); //Prints 1.
var tt = la.Intersect(lc, StringComparer.InvariantCultureIgnoreCase);
Debug.WriteLine(tt.Count());//Prints 1.
更新:以下は私が最終的に作成したコードです。
string a = "AID, BID";
string b = "[vs|AID|1365]";
string c = "[vs|BID|1365]";
List<string> tla = a.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Trim()).ToList();
List<string> tlb = b.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Trim()).ToList();
List<string> tlc = c.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Trim()).ToList();
var t = tla.Intersect(tlb, StringComparer.InvariantCultureIgnoreCase);
var tt = tla.Intersect(tlc, StringComparer.InvariantCultureIgnoreCase);