我收到一个包含4个数字的数组/列表。首先,我想将其转换为二进制数组,然后将其转换为十进制数。 (我了解到,这可以通过“聚合”功能实现。) 二进制值用于根据数组中的位置为4个变量分配true / false值。 如果列表的元素的值= 0则二进制值= 0 =假,如果值<> 0然后二进制值= 1 =真。
所有4个数字总是正数。例如。
{40 60 80 100} - > {1 1 1 1} - > 15(十进制) - > position1 = True; position2 = True; position3 = True; position4 = True;
{20 0 40 80} - > {1 0 1 1} - > 11(十进制) - > position1 = True; position2 = False; position3 = True; position4 = True;
{0 0 20 50} - > {0 0 1 1} - > 3(十进制) - > position1 = False; position2 = False; position3 = True; position4 = True;
谢谢!
我使用的解决方案:
double [] source = new double[] {10,20,0,10};
int result = source.Aggregate(0, (a, x) => (a << 1) | (x == 0 ? 0 : 1));
var bools = new BitArray(new int[] { result }).Cast<bool>().ToArray();
position 1 = bools[0]; //true
position 2 = bools[1]; //true
position 3 = bools[2]; //false
position 4 = bools[3]; //true
//编辑16/09:添加到请求中并使其更具体 //第二次编辑:添加了我使用的解决方案。
答案 0 :(得分:1)
只需Aggregate
int[]
或List<int>
通过 Linq :
int[] source = new int[] { 20, 0, 40, 80 };
int result = source.Aggregate(0, (a, x) => (a << 1) | (x == 0 ? 0 : 1));
测试:
// "1011 or 11 (decimal)"
Console.Write(String.Format("{0} or {1} (decimal)",
Convert.ToString(result, 2), result));
答案 1 :(得分:0)
另一种选择是首先构建实际位表示,然后将其转换为十进制:
var bitsString = string.Join(string.Empty, list.Select(x => x == 0 ? 0 : 1));
var result = Convert.ToInt32(bitsString, 2)
答案 2 :(得分:0)
这是一个非常简单易懂的方式:
var inputCollection = new List<int> { 40, 60, 80, 100 };
var binaryStringBuilder = new StringBuilder();
foreach (var input in inputCollection)
{
binaryStringBuilder.Append(input == default(int) ? 0 : 1);
}
var binaryRepresentation = binaryStringBuilder.ToString();
var decimalRepresentation = Convert.ToInt32(binaryRepresentation, 2).ToString();
Console.WriteLine("Binary representation: {0}", binaryRepresentation);
Console.WriteLine("Decimal representation: {0}", decimalRepresentation);