对数据结构中的特定元素进行排名-是更有效的方法吗?

战斗子宫:

我正在对.csv文件中的某些元素组进行排名。我的程序有效。但是...

我正在寻求有关如何提高我编写的程序效率的建议。我不要求审查我的代码。Stackoverflow参考我也不要求有人为我编写代码。我要问的是:“有没有更有效的方法?如果可以,那又如何?”

我有一个程序,需要多个.csv文件,对其进行修改并添加额外的数据。然后保存这些文件。下面是输入数据的表示形式:

ISBN, Shop, Cost, ReviewScore,
9780008305796, A Bookshop, 11.99, 4.8,
9781787460966, A Bookshop, 6.99, 4.3,
9781787460966, Lots of books, 5.99, 4.4,
9781838770013, A Bookshop, 6.99, 3.8,
9780008305796, The bookseller, 13.99, 4.7,
9780008305796, Lots of books, 16.99, 4.1,

注意:每个.csv文件通常长1000行。ISBN可能有1到20个实例。.csv没有按任何列排序。

我的程序如下工作(伪代码):

  1. 将csv载入String [] []
  2. 遍历String [] []以创建地图:k = ISBN,v =该ISBN的出现次数
  3. 通过String [] []进行迭代3.1从地图中获取ISBN值,然后保存具有该ISBN的每一行(当值达到时停止)3.2然后对已保存的行的价格和评论进行排名,并将行保存到另一个变量中。3.3删除密钥3.4返回3.直到没有密钥
  4. 保存到.csv

数据现在看起来像:

ISBN, Shop, Cost, ReviewScore, CostRank, ReviewRank
9780008305796, A Bookshop, 11.99, 4.8, 1, 1
9781787460966, A Bookshop, 6.99, 4.3, 2, 2
9781787460966, Lots of books, 5.99, 4.4, 1, 1
9781838770013, A Bookshop, 6.99, 3.8, 1, 1
9780008305796, The bookseller, 13.99, 4.1, 2, 3
9780008305796, Lots of books, 16.99, 4.3, 3, 2

该程序不依赖于.csv加载到的数据结构类型。它可以是列表,列表列表,集合等。

马修 :

您/可以/一次完成,代码看起来像这样:

  Map<String, IsbnData> dataStore = new HashMap();
  forEach(row : rows) {
     IsbnData datum = dataStore.get(row[0]); //or whatever the index of ISBN is
     if(datum == null) {
        datum = createIsbnDataFromRow(row);
     } else {
        datum = updateDatumWithMoreData(datum, row);
     }

     dataStore.put(row[0], datum);
  }

这样做的主要好处是,不必String[]麻烦您就可以使用结构良好的类,并且代码更易于阅读。

代码/ may /可以运行得更快,但这可能无关紧要,因为在速度重要之前,它很可能会耗尽内存。(不要把它与程序的速度混为一谈,它可能很慢,但这是由于读取/解析CSV文件所引起的。解析后,传递CSV文件的次数减少了,因此所获得的速度增益可以忽略不计) 。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章