Click here to Skip to main content
Click here to Skip to main content

Manipulating a string array using a Lambda Expression

, 7 Nov 2012
Rate this:
Please Sign up or sign in to vote.
This code will accept an input string and will store the first character of every array element in minimal lines of code.

Introduction

Recently I came across a scenario where I was needed to store only the first character of an input string array. It is easy to do it using loops, however I tried to get the best benefits of lambda expressions which will help write minimal number of lines to achieve this.

Using the code

In this case, I have an input array string and I want to crop everything except the first character from each array element. I am using the Substring method inside a lambda expression to achieve this. The code is as follows:

string[] input1 = new string[] { "Bharti", "Mangesh", "Akash", "Bhavya", "Chetan" };
//OR even if input is comma seperated, multi spaced string 
//string[] input1 = new string[] { "Bharti, Mangesh,Akash, Bhavya, Chetan" }; 

string instr = string.Join(",", input1); 
string[] output1 = instr.Split(',').Select(a => { var t = 
   a.Trim().ToUpper().Substring(0, 1); return t; }).ToArray<string>();

Here the string array output1 will store output as shown below:

output1[0]="B"
output1[1]="M"
output1[2]="A"
output1[3]="B"
output1[4]="C"

The above code has limitation that it works in fair cases and does not handle null values. besides we can replace the substring method with first method inside lambda expression which will do the same task.

//input string which contain null element 
string input1 = "Bharti, Mangesh,Akash,, Bhavya, Chetan";
string[] instr = input1.Split(new char[]{','},  StringSplitOptions.RemoveEmptyEntries);
IEnumerable<char> ie = instr.Where(item => item != null).Select(item => item.TrimStart().First()); 

Here the output enumerable can be converted to char array using ToArray.

We can achive this result using Loop also which goes like this:

string[] output1 = new string[instr.Length];
for (int i = 0, j = instr.Length; i < j; i++)
{
     string item = instr[i];
     if (!string.IsNullOrWhiteSpace(item))
     {
          output1[i] = new String(item.TrimStart().Substring(0, 1).ToUpper().ToCharArray());
     }
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Neeraj_Maurya
Software Developer (Senior) Melstar Infotech Ltd.
India India
"Neeraj is very hardworking and talented guy. i worked with him for 3 years,he is helping in nature and will resolved any difficulty or coding problem with lot of enthusiasm with quality deliverable."
 
(Courtesy: LinkedIn endorsement posted by my ex-colleague Roshan Basekar)
 
- Thanks Roshan
-----------------------------------------------------------------------------------

Comments and Discussions

 
GeneralMy vote of 1 Pinmemberzlanizer6-Nov-12 17:29 
GeneralRe: My vote of 1 [modified] PinmemberNeeraj_Maurya7-Nov-12 0:04 
General[My vote of 2] Post of poor quality [modified] PinmemberMatej Hlatky6-Nov-12 10:14 
GeneralRe: [My vote of 2] Post of poor quality PinmemberNeeraj_Maurya7-Nov-12 3:17 
General[My vote of 2] Clever, but fewer lines of code is not the best metric PinmemberMatt T Heffron6-Nov-12 8:53 
This is clever, but:
 
You start by Join()ing the array of strings, before Split()ting them. Write the code for the form of the data you have. In this case, if you get an array sometimes and a single string sometimes, then make two methods. One that takes the array of strings, and another that splits the single string and calls the former. (Or do the Split directly where the method is called.)
 
More sigificantly, clever code is not necessarily the most maintainable. Adding error prevention to your code would be quite messy. Sometimes a simple loop is more clear and more efficient.
      string[] output1 = new string[input1.Length];
      for (int i = 0; i < input1.Length; i++)
      {
        string item = input1[i];
        if (!string.IsNullOrWhiteSpace(item))
        {
          output1[i] = new string(item.TrimStart().Substring(0, 1).ToUpper();
        }
      }

GeneralRe: [My vote of 2] Clever, but fewer lines of code is not the best metric PinmemberNeeraj_Maurya7-Nov-12 3:21 
GeneralMy vote of 5 PinmemberChristian Amado6-Nov-12 8:15 
GeneralRe: My vote of 5 PinmemberNeeraj_Maurya6-Nov-12 17:13 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 7 Nov 2012
Article Copyright 2012 by Neeraj_Maurya
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid