Solved

Reorder a List Of String

Posted on 2012-03-20
16
405 Views
Last Modified: 2012-03-21
Hello EE,

I have a list of String in Vb.NET with some elements.

My problem is that all the strings that contains "Total" are always at the end and since I build an excel spreadsheet with that list my totals are at the end and they should be somewhere at the begening....


How could I re-order my List(Of String) so that elements that contains "Total" would need to be "Cut and paste' at let's say Index 3 ??  


lets say there is 3 string with total and the first one is at index 10 ..  well all those 9 would need to be at index 3,4 and 5 and all the other strings would need to modify their index so everything is fine in the list

is this possible.. ?
0
Comment
Question by:PhilippeRenaud
  • 9
  • 7
16 Comments
 
LVL 17

Expert Comment

by:nepaluz
Comment Utility
You'd utilize the following logic
        Dim xList As New List(Of String)
        Dim ds = xList.Item(9)
        xList.Remove(ds)
        xList.Insert(2, ds)

Open in new window

I hope you follow. Remove item from index 9 and insert it into index 2
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
so i would do a For loop if I have many?
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
I did this but I have logic error because It will only get the same item multiple times can you help fix it?

myCol is the list of string


                Dim i As Integer = 2
                For x As Integer = 0 To myCol.Count - 1
                    If myCol(x).Contains("Total") Then
                        Dim ds = myCol.Item(x)
                        myCol.Remove(x)
                        myCol.Insert(i, ds)
                        i += 1
                    End If
                Next
0
 
LVL 17

Expert Comment

by:nepaluz
Comment Utility
Could you just give me the entire list that you are working with?
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
yes:


dgv_ID
dgv_Key
dgv_Description
dgv_01
dgv_02
dgv_B01
dgv_B02
dgv_Total01
dgv_Total02
dgv_TotalB01
dgv_TotalB02


I would need this result:

dgv_ID
dgv_Key
dgv_Description
dgv_Total01
dgv_Total02
dgv_TotalB01
dgv_TotalB02
dgv_01
dgv_02
dgv_B01
dgv_B02
0
 
LVL 17

Expert Comment

by:nepaluz
Comment Utility
Here's what Ihave
        Dim qList As New List(Of String) From {"dgv_ID", "dgv_Key", "dgv_Description", "dgv_01", "dgv_02", "dgv_B01", "dgv_B02", "dgv_Total01", "dgv_Total02", "dgv_TotalB01", "dgv_TotalB02"}
        Dim eList = From x In qList Where x.Contains("Total") Select x


        For Each x In qList
            If x.Contains("Description") Then
                Array.ForEach(eList.ToArray, Sub(q) qList.Remove(q))
                Dim xIndex = qList.IndexOf(x) + 1
                qList.InsertRange(xIndex, eList)
                Exit For
            End If
        Next

Open in new window

0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
it doesnt like eList.ToArray()

maybe because eList if not declared? what should it be? IEnumarable maybe?
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
Public member 'ToArray' on type 'WhereSelectListIterator(Of String,String)' not found.
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
LVL 17

Expert Comment

by:nepaluz
Comment Utility
try
        Dim qList As New List(Of String) From {"dgv_ID", "dgv_Key", "dgv_Description", "dgv_01", "dgv_02", "dgv_B01", "dgv_B02", "dgv_Total01", "dgv_Total02", "dgv_TotalB01", "dgv_TotalB02"}
        Dim eList = (From x In qList Where x.Contains("Total") Select x).ToArray


        For Each x In qList
            If x.Contains("Description") Then
                Array.ForEach(eList, Sub(q) qList.Remove(q))
                Dim xIndex = qList.IndexOf(x) + 1
                qList.InsertRange(xIndex, eList)
                Exit For
            End If
        Next

Open in new window

I have tried to convert /evaluate the Enumerable ToArray()
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
I have now:

NullReferenceException
Object reference not set to an instance of an object.

on line

Array.ForEach(eList, Sub(q) qList.Remove(q))

when mouseOver on eList on that line, I see that eList if filled with the total strings
maybe the error if the Sub(q) remove?
0
 
LVL 17

Accepted Solution

by:
nepaluz earned 500 total points
Comment Utility
I have re-jiged your code to:
        Dim ResList As New List(Of String)
        Dim qList As New List(Of String) From {"dgv_ID", "dgv_Key", "dgv_Description", "dgv_01", "dgv_02", "dgv_B01", "dgv_B02", "dgv_Total01", "dgv_Total02", "dgv_TotalB01", "dgv_TotalB02"}
        Dim eList = (From x In qList Where x.Contains("Total") Select x).ToArray
        For Each s In eList
            qList.Remove(s)
        Next
        For Each x In qList
            If x.Contains("Description") Then
                ResList.Add(x)
                Array.ForEach(eList, Sub(q) ResList.Add(q))
            Else
                ResList.Add(x)
            End If
        Next

Open in new window

And I get
res
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
what are your imports?
0
 
LVL 17

Expert Comment

by:nepaluz
Comment Utility
Imports System.Data.Linq
may be the one you are looking for ....what framework are you working with?
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
mmm should be 4

i manage to get it to work by           creating a new lsit of string and your eList i did at the end .ToList()

then myNewList = eList


and in your Array.ForEach   I typed:   myNewList.ToArray()

like this I have the same result as you otherwise it was the same error....very strange..
0
 
LVL 17

Expert Comment

by:nepaluz
Comment Utility
Did you get it to work though? I changed the Lists to Array because of the errors you were getting earlier. now that you have fixed the Linq issue with the imports, you can work with list entirely, and you should be able to get the results without issue.
0
 
LVL 1

Author Comment

by:PhilippeRenaud
Comment Utility
i couldnt resolve even with the import. maybe like you said its the framework.

but its working with what I modified like I told you

thanks for the help Nepaluz
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now