Nano's Blog

01/05/2010

How to assign String to list when use strict enabled?

Filed under: programming — Tags: , — nano @ 13:26

Don’t use “my” again and again to declare $rock[0], $rock[1] etc. Declare the array once (@rocks) once and use it.

you need to declare my @rocks and then not use my any more when referring to $rocks[xxx].
If you don’t know how many elements are going to be in there, you can use push to add new elements into the (initially 0-sized) array.

- from StackOverflow.com

#!C:\Perl\bin\perl.exe
# activePerl 5.8 based
use strict; # enabled
use warnings; 

my @rocks; 

($rocks[0], $rocks[1]) = qw/Hello World/;  

$rocks[2] = 'Tom';
$rocks[3] = 'Cat'; 

print $rocks[0];
print $rocks[1];
print $rocks[2];
print $rocks[3];

01/04/2010

How to print a complex dictionary with StringBuilder?

Filed under: programming — Tags: , — nano @ 10:14

Purpose

Create a complex dictionary
Print the dictionary with StringBuilder

Scope

C#, Dictionary, StringBuilder

Limitations

The sample dictionary was fixed. The code can’t handle the dynamical dictionary.

Note
1.

// watch out for NullReferenceException
            if (!ReferenceEquals(null, mainDict[pair1.Key]) && (mainDict[pair1.Key] is string))

2.

// IDictionary is not the one from the Generics namespace, it is the one from the System.Collections namespace
using System.Collections;

Code Sample

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

class test
{
    private static Dictionary<string, object> mainDict = new Dictionary<string, object>();

    public static void Main()
    {
        Dictionary<string, object> aSubDict = new Dictionary<string,object>();
        Dictionary<string, object> aSub1Dict = new Dictionary<string, object>();
        Dictionary<string, object> aSub2Dict = new Dictionary<string, object>();
        Dictionary<string, object> aSub3Dict = new Dictionary<string, object>();
        Dictionary<string, object> aSub4Dict = new Dictionary<string, object>();

        mainDict.Add("ADKey", aSubDict);
        mainDict.Add("ASKey", "AValue");
        aSubDict.Add("BDKey", aSub1Dict);
        aSubDict.Add("BSKey", "BValue");
        aSub1Dict.Add("CDKey", aSub2Dict);
        aSub1Dict.Add("CSKey", "CValue");
        aSub2Dict.Add("DDKey",aSub3Dict);
        aSub2Dict.Add("DSKey", "DValue");
        aSub3Dict.Add("EDKey", aSub4Dict);
        aSub3Dict.Add("ESKey", "EValue");
        aSub4Dict.Add("FKey", "FValue");

        StringBuilder sb;

        foreach (KeyValuePair<string, object> pair1 in mainDict)
            // watch out for NullReferenceException
            if (!ReferenceEquals(null, mainDict[pair1.Key]) && (mainDict[pair1.Key] is string))
            {
                Console.WriteLine("Key = {0}, Value = {1}", pair1.Key, pair1.Value);
                sb = new StringBuilder();
                sb.AppendFormat("{0}, {1}", pair1.Key, pair1.Value);
                Console.WriteLine(sb.ToString());
            }
            // IDictionary is not the one from the Generics namespace, it is the one from the System.Collections namespace
            else if (!ReferenceEquals(null, mainDict[pair1.Key]) && (mainDict[pair1.Key] is Dictionary<string, object>))
            {
                foreach (KeyValuePair<string, object> pair2 in (Dictionary<string, object>)pair1.Value)
                    if (!ReferenceEquals(null, ((Dictionary<string, object>)pair1.Value)[pair2.Key]) && (((Dictionary<string, object>)pair1.Value)[pair2.Key] is string))
                    {
                        Console.WriteLine("SubKey = {0}, Value = {1}", pair2.Key, pair2.Value);
                        sb = new StringBuilder();
                        sb.AppendFormat("{0}/{1}, {2}", pair1.Key, pair2.Key, pair2.Value);
                        Console.WriteLine(sb.ToString());
                    }
                    else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair1.Value)[pair2.Key]) && (((Dictionary<string, object>)pair1.Value)[pair2.Key] is Dictionary<string, object>))
                    {
                        foreach (KeyValuePair<string, object> pair3 in (Dictionary<string, object>)pair2.Value)
                            if (!ReferenceEquals(null, ((Dictionary<string, object>)pair2.Value)[pair3.Key]) && (((Dictionary<string, object>)pair2.Value)[pair3.Key] is string))
                            {
                                Console.WriteLine("SubKey = {0}, Value = {1}", pair3.Key, pair3.Value);
                                sb = new StringBuilder();
                                sb.AppendFormat("{0}/{1}/{2}, {3}", pair1.Key, pair2.Key, pair3.Key, pair3.Value);
                                Console.WriteLine(sb.ToString());
                            }
                            else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair2.Value)[pair3.Key]) && (((Dictionary<string, object>)pair2.Value)[pair3.Key] is Dictionary<string, object>))
                            {
                                foreach (KeyValuePair<string, object> pair4 in (Dictionary<string, object>)pair3.Value)
                                    if (!ReferenceEquals(null, ((Dictionary<string, object>)pair3.Value)[pair4.Key]) && (((Dictionary<string, object>)pair3.Value)[pair4.Key] is string))
                                    {
                                        Console.WriteLine("SubKey = {0}, Value = {1}", pair4.Key, pair4.Value);
                                        sb = new StringBuilder();
                                        sb.AppendFormat("{0}/{1}/{2}/{3}, {4}", pair1.Key, pair2.Key, pair3.Key, pair4.Key, pair4.Value);
                                        Console.WriteLine(sb.ToString());
                                    }
                                    else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair3.Value)[pair4.Key]) && (((Dictionary<string, object>)pair3.Value)[pair4.Key] is Dictionary<string, object>))
                                    {
                                        foreach (KeyValuePair<string, object> pair5 in (Dictionary<string, object>)pair4.Value)
                                            if (!ReferenceEquals(null, ((Dictionary<string, object>)pair4.Value)[pair5.Key]) && (((Dictionary<string, object>)pair4.Value)[pair5.Key] is string))
                                            {
                                                Console.WriteLine("SubKey = {0}, Value = {1}", pair5.Key, pair5.Value);
                                                sb = new StringBuilder();
                                                sb.AppendFormat("{0}/{1}/{2}/{3}/{4}, {5}", pair1.Key, pair2.Key, pair3.Key, pair4.Key, pair5.Key, pair5.Value);
                                                Console.WriteLine(sb.ToString());
                                            }
                                            else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair4.Value)[pair5.Key]) && (((Dictionary<string, object>)pair4.Value)[pair5.Key] is Dictionary<string, object>))
                                            {
                                                foreach (KeyValuePair<string, object> pair6 in (Dictionary<string, object>)pair5.Value)
                                                    if (!ReferenceEquals(null, ((Dictionary<string, object>)pair5.Value)[pair6.Key]) && (((Dictionary<string, object>)pair5.Value)[pair6.Key] is string))
                                                    {
                                                        Console.WriteLine("SubKey = {0}, Value = {1}", pair6.Key, pair6.Value);
                                                        sb = new StringBuilder();
                                                        sb.AppendFormat("{0}/{1}/{2}/{3}/{4}/{5}, {6}", pair1.Key, pair2.Key, pair3.Key, pair4.Key, pair5.Key, pair6.Key, pair6.Value);
                                                        Console.WriteLine(sb.ToString());
                                                    }
                                                    else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair5.Value)[pair6.Key]) && (((Dictionary<string, object>)pair5.Value)[pair6.Key] is Dictionary<string, object>))
                                                    {
                                                        Console.WriteLine("sub Dict Found");
                                                    }
                                            }
                                    }
                            }
                    }
            }
    }
}

Output

SubKey = FKey, Value = FValue
ADKey/BDKey/CDKey/DDKey/EDKey/FKey, FValue
SubKey = ESKey, Value = EValue
ADKey/BDKey/CDKey/DDKey/ESKey, EValue
SubKey = DSKey, Value = DValue
ADKey/BDKey/CDKey/DSKey, DValue
SubKey = CSKey, Value = CValue
ADKey/BDKey/CSKey, CValue
SubKey = BSKey, Value = BValue
ADKey/BSKey, BValue
Key = ASKey, Value = AValue
ASKey, AValue

Requirement
Code above tested in Visual Studio 2005 Professional Edition compiled against FrameWork 2.0 SP2.

- from StackOverflow.com

Powered by WordPress