C# - Get Closest/next Match In .NET Hashtable (or Other Structure)?
May 7, 2012
I have a scenario at work where we have several different tables of data in a format similar to the following:
Table Name: HingeArms
Hght Part #1 Part #2
33 S-HG-088-00 S-HG-089-00
41 S-HG-084-00 S-HG-085-00
[code]....
Where the first column (and possibly more) contains numeric data sorted ascending and represents a range to determine the proper record of data to get (e.g. height <= 33 then Part 1 = S-HG-088-00, height <= 41 then Part 1 = S-HG-084-00, etc.)
I need to lookup and select the nearest match given a specified value. For example, given a height = 34.25, I need to get second record in the set above:
41 S-HG-084-00 S-HG-085-00
These tables are currently stored in a VB.NET Hashtable "cache" of data loaded from a CSV file, where the key for the Hashtable is a composite of the table name and one or more columns from the table that represent the "key" for the record. For example, for the above table, the Hashtable Add for the first record would be:
ht.Add("HingeArms,33","S-HG-088-00,S-HG-089-00")
This seems less than optimal and I have some flexibility to change the structure if necessary (the cache contains data from other tables where direct lookup is possible... these "range" tables just got dumped in because it was "easy"). I was looking for a "Next" method on a Hashtable/Dictionary to give me the closest matching record in the range, but that's obviously not available on the stock classes in VB.NET. what I'm looking for with a Hashtable or in a different structure? It needs to be performant as the lookup will get called often in different sections of code.
I need a way to compare multiple strings to a test string and return the string that closely resembles it:
TEST STRING: THE BROWN FOX JUMPED OVER THE RED COW CHOICE A : THE RED COW JUMPED OVER THE GREEN CHICKEN CHOICE B : THE RED COW JUMPED OVER THE RED COW CHOICE C : THE RED FOX JUMPED OVER THE BROWN COW
(If I did this correctly) The closest string to the "TEST STRING" should be "CHOICE C". What is the easiest way to do this?
I plan on implementing this into multiple languages including VB.net, Lua, and JavaScript. At this point, pseudo code is acceptable.
Am trying to match characters or combination of the characters i specify in any order they appears
vb Regex.IsMatch(teststring "[nuls]")
what i want matched is either any single character, or combination of any of them in any oder. this means that it should not match any character not specified in the pattern.
I am making a game in VB.NET and I need to know how to get the closest PictureBox to my Player(Which is also a picturebox) I have tried a couple of time but it seems to get exceptions or get itself rather then the closest.
Say I have an array of doubles sorted from smallest to largest. What is the FASTEST way to find the closest value in the array that is LARGER/SMALLER than the search value if an identical value is not found.
Code: dim myArray() as double = {1.245, 2.45, 3, 4.556, 5.4434} 'LARGER AND SMALLER SEARCH for 3 should obviously return 3 because its in the array. 'LARGER SEARCH for 2.46 should return 3 because it is the closest LARGER value 'SMALLER SEARCH for 2.46 should return 2.45 because it is the closest SMALLER value
I certainly can do this on my own, but I am looking for the fastest way.
I have a list box full of X, Y positions in the format of "xxx, yyy". I need to compare my current position to the positions in the list box and find the one that is closest.
I've managed to implement a formula that helps me to get the closest tile's distance that meets my requirements. The only thing is, I can't retrieve the actual tile for some reason... Tiles are named "Items" also. Here is my code:
[code]...
It puts green squiggly lines under ClosestItem and gives me the error: "Warning 2 Variable 'ClosestItem' is used before it has been assigned a value. A null reference exception could result at runtime."
I am creating an application and I have the numbers 1 - 20. Each number represents a location. They are continuous. I need a way to find the closest number to a given location. For example if the event is in location 8 and there are 2 people who can attend who are in locations 6 and 10. Then zone 6 would be chosen as its closest and also the lowest. If I needed the next highest closest number then I could pull all of the numbers into an array and sort them and then pull out the one which is the next highest zone. However as I need to find the closest number which could be lower, im not sure how to achieve this.
Imagine a grid of 16x16. All points are integers, there will be no partial points.I have a list of points that fall somewhere on that grid. Since each point is has an integer x,y coordinate, there can be a maximum of 256 points, but normally there will be considerably less than that.What I am trying to do is take a new point N and find the closest point to it in my list of points. The brute force approach is to use the Pythagorean theorem to find the absolute distance from each point on the list to N, and the minimum of all those distances would give me the closest point. However, since there could easily be 100 points, or so, and there is a real advantage to speed in this case, I am looking for a faster way to do this.
The first thing I thought of would be to divide the grid into four quadrants of 8x8. I could then quickly determine which quadrant N was in, and I was able to pre-compute which quadrant each of the points on the list was in. Therefore, I could easily narrow the search down to the points in the same quadrant as N, but that is invalid. If N lies near the boundary of a quadrant, the closest point might not actually be in the same quadrant as N.So what I am looking for is a way to search a list of X,Y points to quickly find the point closest to some other point N. The fact that the search area is 16x16 might help. A certain amount of pre-computation can be done on the points in the list if it helps, but N can fall anywhere in the grid.
I am looping through a list of DateTime variables and have got the .ToUniversalTime variable. I want to find out from the list which is the closest one approaching Now.ToUniversalTime but am having difficulty trying to work it out I had it looping through like this but this isn't much good as I only want to return the one that is the closest approaching to the system time. If TodaysCard(i).eventDate.ToUniversalTime < Now.ToUniversalTime
Module Module1 Public Structure structure1 Public TRANS() As structure2 End Structure Public Structure structure2 Public X() As Integer End Structure End Module
I'm new to VB 2008 after having spent a long time with VB6, so I apologize if this is a stupid question. But I'd really like to have this straightened out.
Let's say I have a pretty large structure that has lots of properties.
Code:
Now say that I want an internal database with about 10 instances of this structure total, describing, say, 10 different products that a store sells. When these values are loaded from a database, they remain totally static. (However, they can be different each time a program loads)
Now say that I have a class. Each instance of this class is a type of that BaseProduct structure. Meaning, each instance of the class pertains to one of the 10 types of products that the store sells. However, this class has additional properties that pertain specifically to each instance, which are not static.
Code:
Now, the problem here is... If I have 200 different transactions, each one contains an instance of BaseProduct. BaseProduct is HUGE, and is largely redundant (only 10 types possible), so I think it's a little silly to include a whole copy of it with EVERY transaction. However, the Transaction class really needs information regarding the base product it pertains to. Is there a way to, instead of declaring a New BaseProduct in the Transaction class, to simply make one of the properties of the Transaction class a pointer to a BaseProduct variable?
In VB6, I would accomplish this by making a BaseProduct(10) array, and then giving each Transaction an ID number referring to an entry in that array. But in VB 2008, using class structure, this is impossible. I can't define the BaseProduct(10) array outside of a class in a namespace, and if I define it in the actual application's form, then the class loses modularity since it relies on the application that's using it.
I am trying to communicate with an external device and i am trying to send a byte array to the external device via sockets but i am always getting a response the message size is too small so i am not sure what i have done wrong. Between the data type there should be no alignment present and all numbers are represented in little endian format. The char array is not null terminated as mentioned in the protocol specifications.
I have to send data based on a struct that embeds 2 other struct. So here's my vb.net code for the struct used to convert to byte array and the sending part.
Public Structure MESSAGETYPE_OIP_Login Dim Header() As COMMANDHEADER Dim UserName() As PSTRING
I have a hashtable in VB.NET and I need to get the string value of a key from it's value. For example, if I do: hashtable.add("string1","string2") How would I get the value "string1" if I had "string2"?
Can you put a hashtable in another hashtable? I'm trying to make Tetris and to represent the grid of the gamefield I want to have an hashtable within another hashtable. The code is as followed
Public Tetrisfield As Hashtable Public TetrisRow As Hashtable Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
I'm using a HashTable that stores information typed by the user in textboxes on a form. There are 4 textboxes on my form including, Name, Number, account representative, and total count of things added. Besides the text boxes there are 3 buttons on the form, one or adding a record, one for deleting one, and one for display the selected name from the listbox.
Everything pretty much works for me at this point, but I just have one question. When the record is input into the listbox it is supposed to display the users name he or se just entered in the name textbox. Now then, our professor wants us to use the number for the keyString for the HashTable.
That is the problem, if I use the number, instead of the name displaying in the listbox, the number displays. Is there a way to display the name in the listbox instead of the number? Once I have assigned the number as the keyString, am I stuck displaying that value only?
I have a hash table in which the key is of type Point and the value is of type PieceOfBoard. PieceOfBoard is derived from PictureBox. How do I serialize this hashtable to save it to a file?Do I need to add anything to the PieceOfBoard class?
I'm having a problem that's driving me crazy; I can't understand how to convert the XML structure into a class structure (that I want to use to hydrate a XML document).
The XML document looks like this:
xml <?xml version="1.0" encoding="utf-8"?> <artists xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.spotify.com/ns/music/1">
I been learning basics of generics and it looks like it can really improve the performance of the application. But, I am not able to see the generic equivalent of Hashtable. share some sample C# code for creating generic hashtable classes. I need this for a demo.
I am using a hashtable to cache incoming UDP messages before my application processes them. After adding pairs to the hashtable, I am experiencing strange behaviour when interogating the collection, such that a containsKey() enquiry returns false, even though the key exists and is visible in the locals window. Spelling etc is correct, manually calling GetHashCode on the key (String) at each point (add() and containsKey()) is returning different values for the same key. To complicate things more, some keys are matched successfully.
I currently have a ASP.NET Website and a Windows Service doing some work together.It consists in running some processes either using scheduling or on-demand requests.Basically before i had the windows service i used a Shared Hashtable to register all the on-demand requests and avoid duplicate requests for the same ID. I tought i could use the same hashtable to add the scheduled requests also... but somehow they are being created in separated hashtable's.I think its because the windows service uses a diferent instance of the website.
PS: in the hashtable i save full class objects for future reference so the solution must be able to achieve the same.
I was using the For Each frm as From In Application.OpenForms but it seemed a bit inefficient to loop thru every open form when I already knew what I was looking for. After some googling I found some information about hashtables so I used the following code. This code works as long as another form, say form3, isn't open with the same ID. What I am trying to figure out is, why is the hsh.contains only looking at the key instead of looking at the key/value pair?
Form1 Public hsh as New HashTable Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
I am making a small tool that require some calculation. I am using hashtable to store values that I need to calculate. This tool continuously extract data on specific time interval(30 seconds) from webpage and add those data into the hashtable. Now the problem is I need to store the previous extraction data and when new extraction occurs, I need to deduct the previous data from new data.
[Code]...
On first run it shows the result of Data3 = 100 which is currect. But on second run I need to redefine the value of Data2 = Data1 . So I need a result of Data3 = 0 on second run. This may not be the proper way to do this sort of operation. I have also tried using listbox, listview and even textfile to store the Data2 and recall that on second run. But could not make it possible.
This is the last phase of my tool and I am stuck with it.
This is similar to How to keep the order of elements in hashtable, except for .NET. Is there any Hashtable or Dictionary in .NET that allows you to access it's .Index property for the entry in the order in which it was added to the collection?
i have a multi-client/server app that needs to use a hashtable but i am getting an unexpected result because each timei call a sub from form1 the hashtable get recreated and erases all the data. [code]