本帖最后由 pengfuhong 于 2011-05-19 20:18:42 编辑

解决方案 »

  1.   

    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);
      

  2.   

    写成函数,使用起来方便一点:
    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);
      

  3.   


    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(","));
      

  4.   

    再来个更直接的:<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>
      

  5.   

    有没有 像 JS 中的 splice() 真个方法?
      

  6.   


    <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>
      

  7.   


    <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>
      

  8.   


    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);}    
    }
      

  9.   


    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}
      

  10.   

    完善诸如“123|||456|||789......”之类由多个符号重叠进行字符串分隔情况下的兼容性。<script>
    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>
      

  11.   

    .net?瞎忙乎,我呢个去.......
      

  12.   


    var str1 = str.Split(',').Distinct() ;
    foreach (string s in str1)
        Console.WriteLine(s);
      

  13.   

    用JQUERY可以很方便的遍历这个数组
      

  14.   

    vector<T> v;
    ...
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
      

  15.   

    思路
    第一步:分割数组 用逗号为分割点把数值全部分割
    第二步:设置一个嵌套循环
    for i= 分割数组的上限 TO 下限值
        for j= 分割数组下限 到 数组上线 步长-1
            如果数组j=数组i 则 这个数组为空(清空i或j都可以)
        结束
    结束
    第三步:输出数组
      

  16.   

    思路
    第一步:分割数组 用逗号为分割点把数值全部分割
    第二步:设置一个嵌套循环
    for i= 分割数组的上限 TO 下限值
      for j= 分割数组下限 到 数组上线 步长-1
      如果数组j=数组i 则 这个数组为空(清空i或j都可以)
      结束
    结束
    第三步:输出数组
    ----------------------------------------------
    有bug,没考虑到有三个或三个以上的重复的情况!
      

  17.   

    你你用str.split(",")存成数组。再新建个对象,把值都当成对象的属性就成了。因为属性是不允许重复的。所以会只保留一个
      

  18.   

    把分隔号连接的字符串分解成list集合,list集合有个自动去除重复的方法
      

  19.   

    先切割,存储到一个数组里头。
    然后对每个元素,存到hash table里头,记录每个元素出现的次数。
    只输出出现次数为1的。算法复杂度O(n)
      

  20.   

    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();  
      

  21.   

    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(','));
      

  22.   

    hash去掉重复,或者map,总之方法很多,也可以用的正则表达式(可以看看boost的正则表达式)
      

  23.   


    Set set = new HashSet();
    String[] ss = str.split(",");
    for(String s : ss){
       set.add(s);
    }return set;
      

  24.   

    自己封装了一个函数,直接调用即可。
    用了模式匹配和表,边扫字串边构建表,并且字串元素顺序不改变。
    不知道其他语言能不能移植这段代码的思路。
    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))
      

  25.   

    模式匹配写复杂了,简化了下
    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))
      

  26.   


    #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;
    }
      

  27.   

            /// <summary>
            /// 去重复字符
             /// </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 需要去重复的字符串
      

  28.   

    如果是C++的话,都放到set里面就行了。set里的元素都必需不同,相同的只能成功插入一份。
      

  29.   

      private string GetStr(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;
            }