That code is wrong: you are changing B "in place" and comparing against all of it, so you could end up changing the same location multiple times. For example, suppose one of the unique values was 1/2 and another was 1, and those got index values 1 and 2 respectively. You change the 1/2 entries to 1. But that creates a 1 that is then there to be matched against uA(2) so you would mistake the 1 that was the index with the 1 that was the value.
You should just use