2015-07-26 3 views
0

Мне нужно, чтобы ваши ребята думали, как хранить такие данные, поскольку я все еще новичок, так что извините, если это глупый вопрос.Какой формат хранить большое количество смешанных данных

Мне нужно хранить большое количество данных в моем приложении, как показано на рисунке, чтобы оно было доступно для вычислений.

Я попытался сделать это с помощью Struct, но мне придется назначить каждую строку переменной, и я не хочу иметь сотни. Я предпочел бы использовать массив, но не знаю, будут ли смешанные типы не усложняться.

struct sectionPropertiesUKB { 
    let name : String 
    let mass : Double 
    let depth : Double 
    let width : Double 
    let tw : Double 
    let tf : Double 
    let r : Double 
    let d : Double 
    let cfOverTf: Double 
    let cwOverTw: Double 
    let C : Double 
    let N : Int 
    let n : Int 
    let SurfaceAperMeter : Double 
    let SurfaceAperTonne : Double 
    let Iyy : Int 
    let Izz : Int 
    let iyy : Double 
    let izz : Double 
    let Wely : Int 
    let Welz : Int 
    let Wply : Int 
    let Wplz : Int 
    let U : Double 
    let X : Double 
    let Iw : Double 
    let It : Int 
    let A : Int 

init(_ name : String, _ mass : Double, _ depth : Double, _ width : Double, _ tw : Double, _ tf : Double, _ r : Double, _ d : Double, _ cfOverTf: Double, _ cwOverTw: Double, _ C : Double, _ N : Int, _ n : Int, _ SurfaceAperMeter : Double, _ SurfaceAperTonne : Double, _ Iyy : Int, _ Izz : Int, _ iyy : Double, _ izz : Double, _ Wely : Int, _ Welz : Int, _ Wply : Int, _ Wplz : Int, _ U : Double, _ X : Double, _ Iw : Double, _ It : Int, _ A : Int) 
{ 
    self.name = name 
    self.mass = mass 
    self.depth = depth 
    self.width = width 
    self.tw = tw 
    self.tf = tf 
    self.r = r 
    self.d = d 
    self.cfOverTf = cfOverTf 
    self.cwOverTw = cwOverTw 
    self.C = C 
    self.N = N 
    self.n = n 
    self.SurfaceAperMeter = SurfaceAperMeter 
    self.SurfaceAperTonne = SurfaceAperTonne 
    self.Iyy = Iyy 
    self.Izz = Izz 
    self.iyy = iyy 
    self.izz = izz 
    self.Wely = Wely 
    self.Welz = Welz 
    self.Wply = Wply 
    self.Wplz = Wplz 
    self.U = U 
    self.X = X 
    self.Iw = Iw 
    self.It = It 
    self.A = A 

} 

init() 
{ 
    self.init("",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0,0.0,0.0,0,0,0,0,0.0,0.0,0.0,0,0) 

} 

let b1 = sectionPropertiesUKB("1016x305x487",486.7,1036.3,308.5,30.0,54.1,30.0,868.1,20.2,28.9,17,150,86,3.2,6.58,1022000,26700,40.6,6.57,19700,1730,23200,2800,0.867,21.1,64.4,4300,620) 

Есть ли лучший и простой способ хранения этого?

Я не хочу определять переменные b1-b333. Являются ли данные ядра данными? Спасибо за любую помощь.

Data Example

+0

Что вы хотите со всеми этими измерениями, когда он находится в цифровом формате? –

+0

Мне нужно использовать их в различных статических вычислениях. Предположим, пользователь выбирает раздел 914x419x388, который мне нужен, чтобы выполнить вычисления, скажем, площадь фланца = 914x419x388.tf * 914x419x388.b. что-то вроде этого, поэтому я, вероятно, могу получить доступ к нему по всему миру. – ste4lth

+0

Найдите стажера или младшего сотрудника, чтобы ввести все это в электронную таблицу. Или получить сканер и посмотреть, сколько OCR может вам помочь. Запись данных для этого числа проста, но утомительна. –

ответ

1

К сожалению, нет простого способа, чтобы получить данные в программу, кроме написания/копирования данных (возможно, с помощью OCR).

Если вы не хотите писать данные своим кодом, вы также можете сделать это в файле JSON и загрузить его. Преимущество заключается в том, что вам не нужно писать его как код и преобразовывать его в массив нужного вам типа, если он вам нужен.

// using the resources folder in a playground 
// File: Data.json this represents your table (like row = sectionPropertiesUKB) 
[ 
    {"name1" : [3.5, 7.4, 3.9]}, 
    {"name2" : [354, 7, 4.2]}, 
    {"name3" : [5.6, 1.3, 9.3]}, 
    {"name4" : [8.7, 2.2, 3.4]} 
] 

// a struct like you have 
struct Sample { 
    let name: String 
    let length: Double 
    let width: Double 
    let count: Int 
} 

Код, указанный ниже, должен быть написан только один раз.

Swift 1,2:

// get path and contents of the Data.json file 
let path = NSBundle.mainBundle().pathForResource("Data", ofType: ".json") 
if let string = String(contentsOfFile: path!) { 

    /// data is of type [[String : [Double]]] 
    let data = NSJSONSerialization.JSONObjectWithData(string.dataUsingEncoding(NSUTF16StringEncoding)!, options: NSJSONReadingOptions.AllowFragments, error: nil) as! [[String: [Double]]] 

    /// mapped data 
    let samples: [Sample] = data.map{ (dataPoint: [String : [Double]]) in 

     /// row of your table 
     let element: (String, [Double]) = Array(dataPoint)[0] 
     let el: [Double] = element.1 

     // type construction. Since el is of type [Double] some types have to be converted to Int 
     return Sample(name: element.0, length: el[0], width: el[1], count: Int(el[2])) 
    } 
} 

Swift 2 (попытаться поймать, но то же Sample):

let path = NSBundle.mainBundle().pathForResource("Data", ofType: ".json") 

do { 
    let string = try String(contentsOfFile: path!) 
    let data = try NSJSONSerialization.JSONObjectWithData(string.dataUsingEncoding(NSUTF16StringEncoding)!, options: NSJSONReadingOptions.AllowFragments) as! [[String: [Double]]] 

    let samples: [Sample] = data.map{ dataPoint in 
     let element = Array(dataPoint)[0] 
     let el = element.1 
     return Sample(name: element.0, length: el[0], width: el[1], count: Int(el[2])) 
    } 
} catch { 
    print(error) 
} 

Если вы хотите получить доступ к ним по имени, вы должны использовать словарь, который может быть создан как поэтому (путем замены текущей декларации let samples):

let samplesDict: [String : Sample] = data.reduce([:]) { (var dict, dataPoint) in 
    let element = Array(dataPoint)[0] 
    let el = element.1 
    dict[element.0] = Sample(name: element.0, length: el[0], width: el[1], count: Int(el[2])) 
    return dict 
} 
+0

Спасибо Qbyte. У меня нет никаких проблем с вводом данных. Моя основная проблема заключалась в том, какой тип хранилища использовать (многомерный массив?) И как я могу получить к нему доступ? Я попытался использовать struct, но мне нужно назначить каждую строку переменной b1, b2, b3..что я не хочу делать. Я попытался поместить переменные b1, b2 .. в массив, но получил ошибку о раннем назначении. Есть ли лучший способ? – ste4lth

+0

@ ste4lth В моем примере я использую массив структур ('let samples: [Sample]' и ваш case '[sectionPropertiesUKB]').Таким образом, в этом случае вы не делаете переменные, вместо этого вам просто нужно поместить все данные в текстовый файл. – Qbyte

+0

@ ste4lth Этот подход моделирует данные/таблицу один к одному. Поэтому, если вы хотите получить доступ к образцам по имени, вы должны использовать словарь (добавленный пример выше). – Qbyte

Смежные вопросы