我有3个int值:
6
1
2 5
2 7
2 9
1
1
3个bool值:
int value1;
int value2;
int value3;
输入值必须是单独的变量。
bool maxIs1;
bool maxIs2;
bool maxIs3;
表示maxIs1 = True
必须具有最大值,依此类推。
我需要方法将这组数字与一组条件进行比较。 例如:
value1
或者:
int value1 = 10;
int value2 = 1;
int value3 = 10;
bool maxIs1 = True;
bool maxIs2 = False;
bool maxIs3 = True;
bool result = compareValues(); //true
最有效的方法是什么?
答案 0 :(得分:2)
这很有趣。如果你可以把它们放到一个数组中,你可以使用linq干净地检查它们是否满足条件:
var values = new[] { value1, value2, value3 };
var maxes = new[] { maxIs1, maxIs2, maxIs3 };
var max = values.Max();
var result = values
.Zip(maxes, (f, s) => new { value = f, isMax = s })
.All(c => !c.isMax || (c.value == max));
答案 1 :(得分:1)
我认为你不必关心3值的效率
int value1 = 10;
int value2 = 1;
int value3 = 1;
bool maxIs1 = true;
bool maxIs2 = false;
bool maxIs3 = true;
int max = new[] { value1, value2, value3 }.Max();
bool result = (!maxIs1 || value1 == max) && (!maxIs2 || value2 == max) && (!maxIs3 || value3 == max);
答案 2 :(得分:0)
如果您想要不同数量的值,请尝试此解决方案:
static void Main()
{
List<int> listOfInts = new List<int>();
List<bool> listOfBools = new List<bool>();
listOfInts.Add(1);
listOfInts.Add(2);
listOfInts.Add(1);
listOfBools.Add(false);
listOfBools.Add(false);
listOfBools.Add(false);
Console.WriteLine("value = " + Compare(listOfInts,listOfBools));
}
和Compare()
应该是这样的:
static bool Compare(List<int> listOfInts, List<bool> listOfBools)
{
int max = listOfInts.Max();
bool isCorrect = true;
var maxList = listOfInts.Where(value => value == max);
var indicesOfMax = GetIndeciesOfMax(maxList, listOfInts);
for (int i = 0; i < listOfInts.Count; i++)
{
if (indicesOfMax.Contains(i) && listOfInts[i] == max && listOfBools[i])
{
isCorrect = true;
}
else if (!indicesOfMax.Contains(i) && listOfInts[i] != max && !listOfBools[i])
{
isCorrect = true;
}
else
{
isCorrect = false;
break;
}
}
return isCorrect;
}
static List<int> GetIndeciesOfMax(IEnumerable<int> maxList, List<int> list)
{
List<int> indecies = new List<int>();
foreach (var m in maxList)
{
indecies.Add(list.IndexOf(m));
}
return indecies;
}