我有一系列颜色。
Black[0]
White[1]
Blue[2]
Green[3]
Red[4]
Purple[5]
Orange[6]
Pink[7]
Silver[8]
有一个for循环,它迭代颜色数组的计数,并与传入的字符串进行比较。在这种情况下,它是字符串中的单一颜色。
private ushort? FindColor(SomeObject colorArray, string name)
{
for (ushort i = 0; i < colorArray.Count; ++i)
{
SomeObject someObject = colorArray[i];
try
{
if (someObject.Name == name)
return i;
}
}
return null;
}
如果字符串名称与[i]处的颜色匹配,则返回找到的数组编号。
需要发生的是名称将是逗号分隔的颜色字符串。所以它可能是Red,Purple
。
我想要做的是通过colorArray查看是否在阵列中找到每个分割的字符串颜色。 所以在这种情况下,Red在4处找到,Purple在5处找到。由于它们彼此相邻,我想返回4.否则,如果找不到彼此相邻的2种颜色,则只返回null。
private List<string> GetColors(string colorName)
{
if (colorName == null)
return new List<string>();
string[] parts = colorName.Split(',');
return parts.Select(p => p.Trim()).ToList();
}
private ushort? FindColor(SomeObject colorArray, string name)
{
var colors = GetColors(name);
for (ushort i = 0; i < colorArray.Count; ++i)
{
SomeObject someObject = colorArray[i];
try
{
????
for(int j = 0; j < colors.Count; j++)
{
if (someObject.Name == colors[j])
{
// found the first color of Red at [4]
// store in a temp variable ????
// back into the loop and found Purple at [5]
// Purple at [5] was found to be beside Red at [4] so return [4]
return i; // i in this case would be 4
// if the colors are not found beside each other then
return null;
}
}
}
}
return null;
}
有人可以推荐最好的方法来检查这样的案例吗?
答案 0 :(得分:1)
我认为这可能适合你
private void GetColors(string colors)
{
string[] colorArray = new string[] { "red", "green", "purple" };
int previousIndex = -1;
int currentIndex;
string[] myColors = colors.Split(',');
foreach (string s in myColors)
{
currentIndex = Array.IndexOf(colorArray, s);
if (previousIndex != -1)
{
if (previousIndex - currentIndex == 1 || previousIndex - currentIndex == -1)
{
//do stuff here
}
}
previousIndex = currentIndex;
}
}
答案 1 :(得分:0)
在C#中,返回所有匹配索引的列表:
private IEnumerable<int> FindColor(List<System.Drawing.Color> colorArray, string name)
{
var colors = GetColors(name);
var colorStrings = colorArray.Select(y => y.Name.ToString()).ToList();
return colors.Select(x => colorStrings.IndexOf(x));
}
USECASE:
FindColor(ColorList, "White,Black,Pink,Polkadot");
// Returns { 1, 0, 7, -1 }
你可以通过从System.Drawing.Color
而不是字符串列表中返回GetColors()
列表来提高效率,但我认为它不会产生很大的影响
此外,如果您只是想要最初要求的内容 - 返回匹配序列的第一个索引,您可以对返回语句中当前的内容进行排序,然后旋转列表以检查间隙。如果找到间隙,则返回null,否则返回第一个元素。