У меня есть программа ac #, которая читает произвольные файлы CSV.Столбцы могут быть типа int, float или double.
В настоящее время я загружаю эти данные в список, есть ли способ выполнить основные арифметические операции между столбцами.Т.е. добавить две колонки.Если столбцы относятся к разным типам, я бы хотел следовать стандартному продвижению типов.
Есть ли простой способ добиться этого, если столбцы будут заключены в объект?
Вот пример кодаэто показывает поведение, которое я после.Мне нужно сохранить отдельные типы, из-за памяти и разрешения
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List<IList> data = new List<IList>();
data.Add(Enumerable.Range(0, 1000).ToList()); // Add a list of ints
data.Add(Enumerable.Range(0, 1000).Select(v=>(float)v).ToList()); // Add a list of floats
data.Add(Enumerable.Range(0, 1000).Select(v => (double)v).ToList()); // Add a list of doubles
data.Add(GenerateColumn(data[0], data[1], Operation.Add));
data.Add(GenerateColumn(data[1], data[2], Operation.Divide));
}
// This is what I would do if the lists were all the same type
static IList GenerateColumn(IList colA, IList colB,Operation operation)
{
List<double> result = null;
switch (operation)
{
case Operation.Add:
result = colA.Zip(colB, (a, b) => a + b).ToList();
break;
case Operation.Subtract:
result = colA.Zip(colB, (a, b) => a - b).ToList();
break;
case Operation.Multiply:
result = colA.Zip(colB, (a, b) => a * b).ToList();
break;
case Operation.Divide:
result = colA.Zip(colB, (a, b) => a / b).ToList();
break;
}
return result;
}
public enum Operation
{
Add,
Subtract,
Multiply,
Divide
}
}
}