小さなアルゴリズムを作成し、javascript を使用して実装したいと考えています。これが私のアルゴリズムです
data.json
この形式のファイルにデータがあります
[
"109 200",
"109 201",
"102 202",
"103 202"
]
私がやろうとしていることは
- c1、c2、c3、c4 の 4 つの配列コンテナーを作成します。
- 上記データをそのままc1コンテナに入れる
c1 をループし、データを次の形式で c4 に入れます
"109", "200", "109", "201", "102", "202", "103", "202"
c1 をループし、この形式で c2 に入れます
"109,200"
次に、c3 が空かどうかを確認し、c2 から最初の値を読み取り、それを c3 にプッシュします。
手順 4 を繰り返しますが、今回はこの形式で c2 の c1 からの 2 番目のデータ、つまり「109 201」を入れます。
"109,201"
次に、c3 が空でないかどうかを確認し、c2 をループして、これら 2 つの値のいずれかが c4 で繰り返されているかどうかを確認します。繰り返される場合は、data.json から最小量の数値が見つかるまで、手順 6 と 7 を繰り返します。
このアルゴリズムは効率的ではありませんが、それでもこれを使用したいと考えています。
これが私のコードです。
var teams = [],
c1 = [], arr = [], left = [], right = [], j = 0,
show = function () {
var span = $('#list');
$.getJSON('data/data.json', function (ids) {
//c1.push(c);
for (var i = 0; i < ids.length; i++) {
var a = smallcontainer(ids);
var b = bigcontainer(ids);
var c;
if (c1 == "") {
c = a[0].split(" ");
console.log(c);
} else {
}
//console.log(c);
var id = ids[i];
teams = id;
$('<li>' + id + '</li>').appendTo(span);
}
});
},
smallcontainer = function (teams) { //arr
arr = [teams[j]];
j++;
return arr;
},
bigcontainer = function (ids) { //c3. in code it is left+right=result
for (var i = 0; i < ids.length; i++) {
var splitted = ids[i].split(" ");
left.push(splitted[0]);
right.push(splitted[1]);
}
var result = left.concat(right);
};
アップデート
data.json ファイル内のデータには、次の形式で各チームに 2 人のメンバーを持つ 4 つのチームがあります。
"109 200" = Team 1
"109 201" = Team 2
"102 202" = Team 3
"103 202" = Team 4
そのため、最小人数を計算する必要があり、このリストから各チームから 1 人のメンバーを選択して、ID を表示する必要があります。したがって、上記の出力は次のようになります
109
202
最新のアップデート
私はまだ助けを待っています
解決
これは、AlexBell と PAEz の助けを借りたソリューションです。以下のソリューションを使用しましたが、これは基本的にAlexBellによって解決されました
var data = [
"1009 2000",
"1009 2001",
"1002 2002",
"1003 2002",
"1004 2003",
"1005 2004",
"1006 2005",
"1007 2006",
"1007 2007",
"1008 2008",
"1009 2008",
"1010 2009",
"1011 2010",
"1012 2010"
];
var first = [], second = [], result = {}, out = '';
//Separe the ids
for(var i = 0; i < data.length; i++){
var el = data[i].split(' ');
first[i] = el[0];
second[i] = el[1];
}
for(var k = 0; k < first.length; k++){
//Count the elements
var nOfFirst = countElemnts(first, first[k]);
var nOfSecond = countElemnts(second, second[k]);
//If the first is in more that second take it
if(nOfFirst > nOfSecond){
result[first[k]] = 0;
//Else take the second
}else if(nOfFirst < nOfSecond){
result[second[k]] = 0;
//If is only one take it
}else{
result[first[k]] = 0;
}
}
function countElemnts(arr, el){
var count = 0;
for(var j = 0; j < arr.length; j++){
if(arr[j] == el)
count++;
}
//console.log(el+' : '+count);
return count;
}
for(var n in result){
out += 'The id n: '+n+' is in the list\n';
}
alert(out);