Предположим, у меня есть массив, в котором мне нужно хранить строковые значения, а также двойные значения. Я знаю, что я могу хранить двойные строки как строки и просто иметь дело с преобразованиями, но можно ли использовать массив с двумя типами данных?Как хранить смешанные данные массива?
ответ
Вы можете использовать object[]
и сделать некоторые проверки типов. Вы получите бокс/распаковку при доступе к парным разрядам, но в любом случае это будет быстрее, чем double.Parse()
.
Альтернативой является создание класса с обоими типами и маркером:
class StringOrDouble
{
private double d;
private string s;
private bool isString;
StringOrDouble(double d)
{
this.d = d;
isString = false;
}
StringOrDouble(string s)
{
this.s = s;
isString = true;
}
double D
{
get
{
if (isString)
throw new InvalidOperationException("this is a string");
return d;
}
}
string S
{
get
{
if (!isString)
throw new InvalidOperationException("this is a double");
return s;
}
}
bool IsString { get { return isString; } }
}
, а затем создать массив StringOrDouble. Это избавит вас от некоторых типов проверки и бокса, но будет иметь большие накладные расходы памяти.
^это то, что вы здесь описываете? – sooprise
уверен использование:
object[], ArrayList, or List<Object>;
Вам придется бросить, и, возможно, заплатить штраф за бокс удваивается, но они позволяют хранить два различных типа.
object[]
и ArrayList
- два достойных варианта; это зависит от того, нужен ли вам традиционный массив фиксированной длины или вектор (массив переменной длины). Кроме того, я бы «обернул» один из них в пользовательский класс, который выполнял некоторую проверку типов, если строки и парные разряды являются ТОЛЬКО вещами, с которыми вы можете иметь дело, и вам нужно получить их обратно в виде строк и удвоений.
Не самое эффективное использование, но как насчет гибкости:
var a = new object[] {1,2,3,"paul",5.5}
или даже
var a = new object[] {1,2,3,"paul",5.5, new List<string>() {"apple","banana","pear"} }
- 1. Perl: возможно ли Хэш хранить смешанные переменные?
- 2. Хранить данные с хэш-массива
- 3. Хранить данные из массива DataGridView
- 4. Хранить данные массива в JTable
- 5. SQL АГРЕГИРОВАНИЕ Смешанные данные
- 6. Как хранить данные с помощью массива?
- 7. Как хранить данные массива в таблице?
- 8. Как хранить эти данные?
- 9. читать смешанные данные в R
- 10. Python JSON кодирует смешанные данные
- 11. Flex DataGrid показывает смешанные данные
- 12. Как создать Oracle Spatial Index, который будет хранить смешанные SRID?
- 13. Хранить данные массива в одной строке PHP
- 14. Redis - как хранить данные?
- 15. как хранить данные локально
- 16. Как хранить данные Json
- 17. Как хранить данные регистрации?
- 18. как хранить статистические данные?
- 19. Bukkit как хранить данные
- 20. как хранить данные
- 21. Как хранить данные OAuth
- 22. Как хранить данные MongoDB
- 23. Как хранить данные пользователя?
- 24. Как хранить большие данные?
- 25. Как хранить связанные данные
- 26. Как хранить исторические данные
- 27. Как хранить данные локально?
- 28. Как хранить эти данные?
- 29. Как хранить XML-данные?
- 30. Как хранить данные вокселя?
Насколько важна производительность? Если это так, я мог бы попробовать написать собственный класс, сохраняя их отдельно, но подвергая их как один. – Aliostad
как вы обнаруживаете, что вы вытаскиваете двойной или струнный. Всегда ли они в одном порядке или? –