【发布时间】:2017-08-09 21:30:19
【问题描述】:
我有 2 个列表,Planets 和 Favorites。它们包含多个用空格分隔的单词。
我将列表按空格拆分为子列表。
现在我想检查Planets 是否包含来自Favorites 的名称。
但是Planets.Contains() 找不到匹配项。
http://rextester.com/YLOG10363
// Planets List
//
List<string> Planets = new List<string>();
Planets.Add("First Mercury Gray");
Planets.Add("Second Venus Yellow");
Planets.Add("Third Earth Blue");
Planets.Add("Fourth Mars Red");
// Favorites List
//
List<string> Favorites = new List<string>();
Favorites.Add("Venus Hot");
Favorites.Add("Mars Cold");
// Sublists
//
string[] arrPlanets = null;
string[] arrFavorites = null;
List<string> Order = new List<string>();
List<string> Names = new List<string>();
List<string> Colors = new List<string>();
// In each Line of Planets & Favorites Lists, Split by Space
// Add Word to it's Sublist
//
for (int i = 0; i < Planets.Count; i++)
{
// Create Planet Sublists
arrPlanets = Convert.ToString(Planets[i]).Split(' ');
Order.Add(arrPlanets[0]);
Names.Add(arrPlanets[1]);
Colors.Add(arrPlanets[2]);
// Create Favorites Sublist
// Prevent Favorites index from going out of range
if (i < Favorites.Count())
{
arrFavorites = Convert.ToString(Favorites[i]).Split(' ');
// Display Message if Planets List Contains a Name from Favorites
//
if (Planets.Contains(arrFavorites[0]))
{
Console.WriteLine("Favorite Detected.");
}
}
}
【问题讨论】:
-
你为什么在字符串上使用
Convert.ToString?此外,我建议您将这些值解析为包含 3 个属性的类,然后使用该类类型的列表。 -
public class Planet { public string Order { set; get; } public string Name { set; get; } public string Color { set; get; } } -
@juharr 我收到一个错误,说它无法将 char 转换为字符串。但是在重构之后,它似乎无需这样做就可以编译。
-
@juharr 我想我找到了问题区域,
Contains不会在任何列表中找到匹配项,如果它有任何分隔单词的空格。 -
问题是
Planets不包含完全匹配的字符串。你想要的是Planets.Any(p => p.Contains(arrFavorites[0]));但这真的不是一个好主意。如果你有一个Planet类,那就是Planets.Any(p => p.Name = arrFavorites[0]));