gpt4 book ai didi

javascript - 在 .CSV 中查找唯一值

转载 作者:行者123 更新时间:2023-11-30 16:01:16 27 4
gpt4 key购买 nike

我有一个包含大量数据的 .CSV 数据文件,我的意思是一吨(80+ 百万行)数据。

数据全部在两列中,如下所示:

 src      |      dst 
123123 | 456456
321321 | 654654
987987 | 789789
123123 | 456456

以此类推 8000 万行。

(注意:我知道分隔符在 .CSV 中应该是 ',',但在本例中它是 '|'。文件扩展名仍然是 .CSV)

我正在尝试弄清楚如何编写一个程序来读取所有数据,并在“src”字段中打印出重复值的数量。例如,在我的示例中,输出看起来像“123123:出现了 2 次”

我已经尝试了一些解决方案,最著名的是这个:How to read the csv file properly if each row contains different number of fields (number quite big)?

我编写了一个循环,将“src”与“dst”分开,“newData”是 .CSV 文件

    //go through each line and split + link the data to src/dst
data.forEach(function (line) {
newData = line.split('|'); //note, split returns an array

let src = newData[0]; //src from data.csv
let dst = newData[1]; //dst from data.csv


//test print the data
//console.log(newData);
});

但是我在从 newData[0] (src) 列获取重复值计数时遇到问题。

最佳答案

它可以在一个循环中完成(复杂度为 O(N) 的解决方案……如果您有 8000 万行,这非常重要……):

function solution(A)
{
var lines = A.split(/\r?\n/g);

var counts = {};
var multiples = {};

for (var i=0, ii=lines.length; i<ii; i++)
{
var splt = lines[i].split(/\s*\|\s*/g);
var val = splt[0];

if (!counts[val]) {
counts[val] = 1;
} else {
counts[val]++;
multiples[val] = counts[val];
}
}

return multiples;
}

即返回一个对象,其键为第一列中多次出现的所有值,它们的值代表它们出现的次数。例如,您给定的字符串将返回对象:

{ '123123': 2 }

因为该值被看到了两次。

这是它工作的一个 jsfiddle(它将它记录到控制台,所以打开你的开发工具):https://jsfiddle.net/x8b7ko3g/

关于javascript - 在 .CSV 中查找唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com