Ejemplo n.º 1
0
        public Bucket ConvertDataTableToBucket(DataTable dt)
        {
            Bucket bucket = new Bucket();

            foreach (DataRow row in dt.Rows)
            {
                var tuple = new data.Tuple();
                tuple.SetQid(qid);
                foreach (DataColumn column in dt.Columns)
                {
                    string value = row[column].ToString().Trim();
                    tuple.AddValue(value);
                }
                bucket.Add(tuple);
            }
            return(bucket);
        }
        public Bucket ConvertDataTableToBucket(DataTable dt)
        {
            Bucket bucket = new Bucket();

            foreach (DataRow row in dt.Rows)
            {
                var tuple = new data.Tuple();
                tuple.SetQid(qid);
                foreach (DataColumn column in dt.Columns)
                {
                    string value = row[column].ToString().Trim();
                    tuple.AddValue(value);
                }
                bucket.Add(tuple);
            }
            return bucket;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds the mapped integer values to A and B.
        /// </summary>
        /// <param name="bucket">the bucket that to be examined</param>
        /// <param name="qid">QI indecies</param>
        void CreateAB(Bucket bucket, int[] qid)
        {
            ids = new string[bucket.Count];
            // here the sensitive value signifies, if the tuple is in B or not
            // store the sensitive value indexes in this:
            sensitiveValueIndexes = new List <int>();
            dictionary            = new Dictionary <string, int>();

            for (int k = 0; k < bucket.Count; k++)
            {
                data.Tuple tuple = bucket[k];
                // I suppose that the sensitive value is the last one
                int dimension      = tuple.GetNumberOfAttributes() - 1;
                int sensitiveValue = Convert.ToInt32(tuple.GetValue(dimension));
                if (sensitiveValue == 1)
                {
                    sensitiveValueIndexes.Add(k);
                }
            }

            //1. Initialize  A and B.
            A = new int[bucket.Count][];
            for (var i = 0; i < A.Length; i++)
            {
                A[i] = new int[qid.Length];
            }
            B = new int[sensitiveValueIndexes.Count][];
            for (var i = 0; i < B.Length; i++)
            {
                B[i] = new int[qid.Length];
            }
            int nextIndexForB = -1;

            // 2. Add the mapped integer values to A and B
            // In A, row index corresponds to the tuple index. In B row index doesn't have extra information.
            // column index corresponds to the attributes index
            for (int k = 0; k < bucket.Count; k++)
            {
                data.Tuple tuple     = bucket[k];
                int        dimension = tuple.GetNumberOfAttributes() - 1;
                // I suppose that the sensitive value is the last one
                //int sensitiveValue = Convert.ToInt32(eq[k].GetValue(eq[k].getNumberOfAttributes() - 1));
                int sensitiveValue = Convert.ToInt32(tuple.GetValue(dimension));
                if (sensitiveValue == 1)
                {
                    nextIndexForB++;
                }
                //Add the id attribute: 0 in this case
                ids[k] = (bucket[k].GetValue(0));

                for (int y = 0; y < qid.Count(); y++)
                {
                    int    value = -1;
                    string key   = bucket[k].GetValue(qid[y]);
                    // map the original values to small integers
                    if (dictionary.ContainsKey(key))
                    {
                        value = dictionary[key];
                    }
                    else
                    {
                        dictionary[key] = valueCount++;
                        value           = dictionary[key];
                    }
                    A[k][y] = value;
                    if (sensitiveValue == 1)
                    {
                        B[nextIndexForB][y] = value;
                    }
                }
            }
        }