var str="1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4"; var ar = str.split(','); //分割为数组 var arResult = []; for (var i = 0; i < ar.length; i ++) { var FLAG = false; for(var j = 0; j < arResult.length; j ++) { if (arResult[j] == ar[i]) { FLAG = true; break; } } if (!FLAG) arResult.push(ar[i]); } str = arResult.join(','); alert(str);
写成函数,使用起来方便一点: var str="1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4"; var ar = str.split(','); //分割为数组 function array_unique(ar) { var arResult = []; for (var i = 0; i < ar.length; i ++) { var FLAG = false; for(var j = 0; j < arResult.length; j ++) { if (arResult[j] == ar[i]) { FLAG = true; break; } } if (!FLAG) arResult.push(ar[i]); } return arResult; } str = array_unique(ar).join(','); alert(str);
var str="1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";alert(str.match(/(\b[^,]+\b)(?!.*,\1\b)/g).join(","));
再来个更直接的:<script> var str="1,1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";alert(str.replace(/(\b[^,]+),(?=.*,\1\b)/g, "")); </script>
var str="1559550232,1559550232,301723410,193888354,193888354,2,1,4,3,2059573458,1834017652,1,2,3,4"; var arr = str.split(','), len = arr.length, t={}; for(var i=len-1;i>=0;i--){ if(!t[arr[i]]){t[arr[i]]=true}else{arr.splice(i,1);} }
string str = "1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4"; string[] s = str.Split(new char[] { ',' }); IEnumerable<string> ss = s.Distinct();
Array.prototype.distinct = function() { var derivedArray = []; for (var i = 0; i < this.length; i += 1) { if (!derivedArray.contains(this[i])) { derivedArray.push(this[i]) } } return derivedArray; }; and to demonstrate:alert([1,1,1,2,2,22,3,4,5,6,7,5,4].distinct().join(','));
hash去掉重复,或者map,总之方法很多,也可以用的正则表达式(可以看看boost的正则表达式)
Set set = new HashSet(); String[] ss = str.split(","); for(String s : ss){ set.add(s); }return set;
自己封装了一个函数,直接调用即可。 用了模式匹配和表,边扫字串边构建表,并且字串元素顺序不改变。 不知道其他语言能不能移植这段代码的思路。 function distinct(str){ var tab = {};
var ar = str.split(','); //分割为数组
var arResult = [];
for (var i = 0; i < ar.length; i ++) {
var FLAG = false;
for(var j = 0; j < arResult.length; j ++) {
if (arResult[j] == ar[i]) {
FLAG = true;
break;
}
}
if (!FLAG) arResult.push(ar[i]);
}
str = arResult.join(',');
alert(str);
var str="1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";
var ar = str.split(','); //分割为数组
function array_unique(ar) {
var arResult = [];
for (var i = 0; i < ar.length; i ++) {
var FLAG = false;
for(var j = 0; j < arResult.length; j ++) {
if (arResult[j] == ar[i]) {
FLAG = true;
break;
}
}
if (!FLAG) arResult.push(ar[i]);
}
return arResult;
}
str = array_unique(ar).join(',');
alert(str);
var str="1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";alert(str.match(/(\b[^,]+\b)(?!.*,\1\b)/g).join(","));
var str="1,1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";alert(str.replace(/(\b[^,]+),(?=.*,\1\b)/g, ""));
</script>
<script>
String.prototype.unique = function(_) {
return this.replace(new RegExp("(\\b[^\\"+_+"]+)\\"+_+"(?=.*\\"+_+"\\1\\b)","gi"), "")
}var str="1,1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";alert(str.unique(","));
</script>
<script>
String.prototype.unique = function(_) {
var _ = _ || ",";
return this.replace(new RegExp("(\\b[^\\"+_+"]+)\\"+_+"(?=.*\\"+_+"\\1\\b)","gi"), "")
}var str = "1,1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";alert(str.unique());
</script>
var str="1559550232,1559550232,301723410,193888354,193888354,2,1,4,3,2059573458,1834017652,1,2,3,4";
var arr = str.split(','), len = arr.length, t={};
for(var i=len-1;i>=0;i--){
if(!t[arr[i]]){t[arr[i]]=true}else{arr.splice(i,1);}
}
void Main()
{
string str="";
str="1559550232,458021114,301723410,193888354,1997258619,458021114,301723410,338738686,193888354,2016236333,193888354,301723410,458021114,1997258619,338738686,512271688,862206212,338738686,1997258619,458021114,193888354,301723410,2,1,4,3,193888354,696252605,894527898,1070111191,512271688,2059573458,1834017652,1,2,3,4";
str=string.Join(",",str.Split(',').Distinct().ToArray());
Console.WriteLine(str);
//1559550232,458021114,301723410,193888354,1997258619,338738686,2016236333,512271688,862206212,2,1,4,3,696252605,894527898,1070111191,2059573458,1834017652}
String.prototype.unique = function(_) {
var _ = _ ? _.replace(/./g, "\\$&") : "\\,";
return this.replace(new RegExp("(\\b[^"+_+"]+)"+_+"(?=.*"+_+"\\1\\b)","gi"), "")
}var str = "1|||1559550232|||458021114|||301723410|||193888354|||1997258619|||458021114|||301723410|||338738686|||193888354|||2016236333|||193888354|||301723410|||458021114|||1997258619|||338738686|||512271688|||862206212|||338738686|||1997258619|||458021114|||193888354|||301723410|||2|||1|||4|||3|||193888354|||696252605|||894527898|||1070111191|||512271688|||2059573458|||1834017652|||1|||2|||3|||4";alert(str.unique("|||"));
</script>
var str1 = str.Split(',').Distinct() ;
foreach (string s in str1)
Console.WriteLine(s);
...
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
第一步:分割数组 用逗号为分割点把数值全部分割
第二步:设置一个嵌套循环
for i= 分割数组的上限 TO 下限值
for j= 分割数组下限 到 数组上线 步长-1
如果数组j=数组i 则 这个数组为空(清空i或j都可以)
结束
结束
第三步:输出数组
第一步:分割数组 用逗号为分割点把数值全部分割
第二步:设置一个嵌套循环
for i= 分割数组的上限 TO 下限值
for j= 分割数组下限 到 数组上线 步长-1
如果数组j=数组i 则 这个数组为空(清空i或j都可以)
结束
结束
第三步:输出数组
----------------------------------------------
有bug,没考虑到有三个或三个以上的重复的情况!
然后对每个元素,存到hash table里头,记录每个元素出现的次数。
只输出出现次数为1的。算法复杂度O(n)
string[] s = str.Split(new char[] { ',' });
IEnumerable<string> ss = s.Distinct();
var derivedArray = [];
for (var i = 0; i < this.length; i += 1) {
if (!derivedArray.contains(this[i])) {
derivedArray.push(this[i])
}
}
return derivedArray;
};
and to demonstrate:alert([1,1,1,2,2,22,3,4,5,6,7,5,4].distinct().join(','));
Set set = new HashSet();
String[] ss = str.split(",");
for(String s : ss){
set.add(s);
}return set;
用了模式匹配和表,边扫字串边构建表,并且字串元素顺序不改变。
不知道其他语言能不能移植这段代码的思路。
function distinct(str){
var tab = {};
var push = table.push;
string.replace(
str,
"(\d+),{0,1}",
function(a){
if(!tab[a]){
tab[a] = true;
push(tab,a)
}
}
) return string.join(tab,",")
}var str='1559550232,458021114,301723410,
193888354,1997258619,458021114,301723410,
338738686,193888354,2016236333,193888354,
301723410,458021114,1997258619,338738686,
512271688,862206212,338738686,1997258619,
458021114,193888354,301723410,2,1,4,3,
193888354,696252605,894527898,1070111191,
512271688,2059573458,1834017652,1,2,3,4'io.open();
io.print(distinct(str))
function distinct(str){
var tab = {};
var push = table.push;
string.replace(
str,
"\d+",
function(a){
if(!tab[a]){
tab[a] = true;
push(tab,a)
}
}
) return string.join(tab,",")
}var str='1559550232,458021114,301723410,
193888354,1997258619,458021114,301723410,
338738686,193888354,2016236333,193888354,
301723410,458021114,1997258619,338738686,
512271688,862206212,338738686,1997258619,
458021114,193888354,301723410,2,1,4,3,
193888354,696252605,894527898,1070111191,
512271688,2059573458,1834017652,1,2,3,4'io.open()
io.print(distinct(str))
#include <string>
#include <iostream>
#include <vector>
#include <map>
using namespace std;void init(string & rigid,vector<string> & _vector)
{
string tmp;
for (string::size_type i = 0; i != rigid.size(); i++)
{
if (ispunct(rigid[i]))
{
_vector.push_back(tmp);
tmp.clear();
}
else
{
tmp += rigid[i];
}
}
}void deal(vector<string> & _vector, map<string,int> & _map)
{
for (int i = 0; i != _vector.size(); i++)
{
_map[_vector[i]]++;
}
_vector.clear();
for(map<string,int>::iterator iter = _map.begin(); iter != _map.end(); iter++)
{
_vector.push_back(iter->first);
}}
int main()
{
vector<string> _vector;
map<string,int> _map;
string a = "1,2,3,4,5,1,1,12,2";
init(a,_vector);
deal(_vector,_map);
for (vector<string>::iterator i = _vector.begin(); i != _vector.end(); i++)
{
cout<<*i<<endl;
}
return 0;
}
/// 去重复字符
/// </summary>
/// <param name="str">源码</param>
/// <param name="split">拆分字符</param>
/// <returns></returns>
public string Distinct(string str, string [] split)
{ string[] init = str.Split(split, StringSplitOptions.None);
List<string> lstResult=new List<string>();
foreach (string result in init)
{
if (!lstResult.Contains(result))
{
lstResult.Add(result);
}
} return string.Join(",", lstResult.ToArray());
}
//Distinct(str,new string[]{","}) //调用方法 str 需要去重复的字符串
{
string strResult = "";
string[] stra = str.Split(',');
List<string> list = new List<string>(); foreach (string strSub in stra)
{
list.Add(strSub);
} List<string> listResult = new List<string>(); foreach (string strSub in list)
{
bool flag = false;
foreach (string strA in listResult)
{
if (strSub == strA)
{
flag = true;
}
} if (!flag)
{
listResult.Add(strSub);
}
} foreach (string strSub in listResult)
{
strResult += "," + strSub;
}
return strResult;
}